@staticmethod는 파이썬 클래스 내부에서 정의되는 메서드를 "정적 메서드(static method)"로 지정하기 위해 사용하는 데코레이터이다. 정적 메서드는 클래스나 인스턴스의 상태와 무관하게 작동하는 독립적인 메서드로, 클래스 이름 또는 인스턴스를 통해 호출할 수 있다.
정적 메서드는 클래스 내부에서 정의하되, @staticmethod 데코레이터를 사용하고, 메서드 정의 시 self나 cls를 첫 번째 인자로 받지 않는다. 호출 시에는 클래스명 또는 인스턴스를 통해 호출할 수 있다.
class Math:
@staticmethod
def add(x, y):
return x + y
# 호출 방법
Math.add(3, 5) # 클래스명으로 호출
m = Math()
m.add(3, 5) # 인스턴스로도 호출 가능
class Account:
numOfAccounts = 0
def __init__(self, name):
self.name = name
Account.numOfAccounts += 1
@staticmethod
def reset_count():
Account.numOfAccounts = 0
reset_count()는 Account 클래스의 정적 메서드로, 인스턴스 없이 클래스 변수에 접근하여 초기화 작업을 수행한다.self, cls를 참조하지 않기 때문에 정적 메서드로 구현하는 것이 적절하다.| 구분 | 일반 메서드 | 클래스 메서드 | 정적 메서드 |
|---|---|---|---|
| 데코레이터 | (없음) | @classmethod | @staticmethod |
| 첫 번째 인자 | self (인스턴스) | cls (클래스) | 없음 |
| 클래스 변수 접근 | 가능 | 가능 | 클래스명을 통해 수동 접근 |
| 인스턴스 변수 접근 | 가능 | 불가능 | 불가능 |
| 용도 | 인스턴스 동작 구현 | 클래스 상태 제어 | 독립적 기능 제공 |